package springmvc.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.Data;

import org.dhbw.cocktail.Cocktail;
import org.dhbw.cocktail.CocktailType;
import org.dhbw.cocktail.Ingredient;
import org.dhbw.cocktail.mixer.ICocktailMixer;
import org.dhbw.cocktail.mixer.MixerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

/**
 * Conbtroller for inital filling of the db, call with fill_db.html 
 * @author Roland von Werden, Silas Braendlin
 *
 */
@Data
public class FillDatabaseController implements Controller {

	@Autowired
	@Qualifier("cocktail_mixer_factory")
	MixerFactory mixerFactory;
	
	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0,
		HttpServletResponse arg1) throws Exception {
		ModelAndView mav = new ModelAndView();
		ICocktailMixer mixer = mixerFactory.getCocktailMixer();
		
        Ingredient rum = new Ingredient("Rum", 2000, "ml");
		Ingredient coke = new Ingredient("Coca-Cola", 10000, "ml");
		Ingredient lime = new Ingredient("Lime", 40, "stk");
		Ingredient cream = new Ingredient("Cream", 1500, "ml");
		Ingredient creamCoco = new Ingredient("Cream of Coconut", 1500, "ml");
		Ingredient pineappleJuice = new Ingredient("Pineapple Juice", 5000, "ml");
		Ingredient sugar = new Ingredient("Sugar", 250, "g");
		Ingredient orangeJuice = new Ingredient("Orange Juice", 5000, "ml");
		Ingredient grenadineSyrup = new Ingredient("Grenadine Syrup", 1500, "ml");
		Ingredient wodka = new Ingredient("Wodka", 2000, "ml");
		Ingredient oranges = new Ingredient("Oranges", 40, "stk");
		
		mixer.saveIngredient(lime);
		mixer.saveIngredient(coke);
		mixer.saveIngredient(rum);
		mixer.saveIngredient(cream);
		mixer.saveIngredient(creamCoco);
		mixer.saveIngredient(pineappleJuice);
		mixer.saveIngredient(sugar);
		mixer.saveIngredient(orangeJuice);
		mixer.saveIngredient(grenadineSyrup);
		mixer.saveIngredient(wodka);
		mixer.saveIngredient(oranges);
		
		CocktailType longDrink = new CocktailType("Longdrink", "Ein Longdrink ist eine Variante des Cocktail mit einem relativ großen Volumen (>14 cl, h&auml;ufig 16-28 cl)");
		CocktailType shortdrink = new CocktailType("Shortdrink", "Diese Kategorie enthält alle übrigen Shortdrinks, wie z.B. die Daiquiris. Die Shortdrinks zeichnen sich durch ein geringeres Flüssigkeitsvolumen gegenüber den Longdrinks aus.");
		CocktailType fancyDrink = new CocktailType("Fancy Drinks", "Fancy (engl.) bedeutet soviel wie Fantasie, Einfall, Laune bzw. ausgefallen, kunstvoll und dementsprechend können Fancy Drinks mit den unterschiedlichsten Zutaten gemixt werden. Ein Fancy Drink ist daher auch ein Cocktail, der sich in keine der klassischen Cocktailgruppen einordnen lässt.");
		CocktailType hotDrinks = new CocktailType("Hot Cocktails", "Heisse Cocktails bzw. Hot Drinks sind heisse Mischgetränke, Cocktails und Kaffeegetränke. In den meisten Fällen werden Hot Drinks aus Tee oder Kaffee und verschiedenen alkoholischen und nicht-alkoholischen Zugaben gemischt. Zusätzlich finden Sie heisse Getränke auch unter der Kategorie Shots bzw. Bowle, am besten mit Hilfe der Profisuche (Option 'heiss' auswählen).");
		CocktailType bowle = new CocktailType("Bowle", "Der Begriff der Bowle ist eigentlich selbsterklärend, die Rubrik 'Bowlerezepte' ist von der Startseite aus zugänglich und enhält nicht nur eine Menge Rezepte, sondern auch Tips wie man eine richtig gute Bowle zubereitet. Durchlesen, und schon kann nichts mehr schiefgehen.");
		CocktailType cocktailsVirgin = new CocktailType("Cocktails alkoholfrei", "Unter der Rubrik 'alkoholfreie Cocktails' finden Sie geschmackvolle, alkoholfreie Mixgetränke. Die meisten alkoholfreien Cocktails sind sehr fruchtig im Geschmack und damit eine absolut attraktive Alternative - nicht nur für Autofahrer, Kinder und Schwangere. Inbesondere an heissen Sommertagen sind diese gegenüber den alkoholhältigen Cocktails eindeutig zu bevorzugen, da Alkohol dem Körper zusätzlich Flüssigkeit entzieht.");
		
		mixer.saveCocktailType(longDrink);
		mixer.saveCocktailType(shortdrink);
		mixer.saveCocktailType(fancyDrink);
		mixer.saveCocktailType(hotDrinks);
		mixer.saveCocktailType(bowle);
		mixer.saveCocktailType(cocktailsVirgin);		
		
		Cocktail cubaLibre = new Cocktail("Cuba Libre", longDrink, true);
		cubaLibre.addIngredient(rum, 40);
		cubaLibre.addIngredient(coke, 160);
		cubaLibre.addIngredient(lime, 1);
		
		Cocktail pinaColada = new Cocktail("Pina Colada", longDrink, true);
		pinaColada.addIngredient(cream, 10);
		pinaColada.addIngredient(rum, 60);
		pinaColada.addIngredient(creamCoco, 40);
		pinaColada.addIngredient(pineappleJuice, 120);
		
		Cocktail caribianDream = new Cocktail("Caribian Dream", fancyDrink, true);
		caribianDream.addIngredient(cream, 20);
		caribianDream.addIngredient(rum, 40);
		caribianDream.addIngredient(creamCoco, 40);
		caribianDream.addIngredient(pineappleJuice, 90);
		
		Cocktail asianTiger = new Cocktail("Asian Tiger", bowle, true);
		asianTiger.addIngredient(grenadineSyrup, 200);
		asianTiger.addIngredient(wodka, 500);
		asianTiger.addIngredient(orangeJuice, 1000);
		asianTiger.addIngredient(oranges, 2);
		
		mixer.saveCocktail(cubaLibre);
		mixer.saveCocktail(pinaColada);
		mixer.saveCocktail(caribianDream);
		mixer.saveCocktail(asianTiger);
		//cubaLibre.mix(1, mixer);
		
		mav.addObject("result", "done");
		
		return mav;
	}

}
